package net.scala.chapter1.test

import net.scala.chapter1.c
import net.scala.chapter1.o.Programmer

/**
 * @author chenyy2@corp.21cn.com
 */
object TestCase {
  // main方法
  def main(args: Array[String]) {
    /* 关于类型定义，其中
    | def 用于定义一个方法(method)
    | val 用于定义一个不可被修改的固定的值(fixed value)
    | var 用于定义一个可以被任意修改的变量(variable)
    */
    val p = new Programmer("brds", "zh_cn")
    println(p.name)
    println(p.language)

    val p1 = new c.Programmer("brds","zh_cn")   // 包名直接引入
    println(p1.getName)
    println(p1.getLanguage)

    var v = "Hello World!"
    v = v.replace("!", "?")
    println(v)

    // Scala是一门函数式语言，这将意味着函数就是(first-class values)
    // 在Scala中，所有函数都是值(value)，因此，你可以把它作为参数传递或者从其他函数
    val inc = (x:Int) => x + 1
    println(inc(1))

    val list = List(1,2,3).map((x:Int)=>x+1)
    println(list)

    // 在面向对象编程中，Scala将函数伪装成对象(object)和值(value)
    // 上例子实际上为
    val list2 = List(1, 2, 3).map(new Function1[Int, Int]{ def apply(x:Int): Int = x + 1})
    println(list2)

  }
}
